#!/bin/bash

#-------------------------------------------------------------------
# icecc 编译节点部署脚本
#
# 功能：
#   在编译服务器上部署 icecc 守护进程（iceccd）
#   连接到 icecc 调度器，提供分布式编译能力
#
# 使用方法：
#   sudo ./setup-icecc-node.sh [SCHEDULER_IP:PORT]
#   
#   示例：
#     sudo ./setup-icecc-node.sh 172.18.63.1:8765
#
# 作者：NFServer Team
# 日期：2025-11-04
#-------------------------------------------------------------------

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

log_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}

# 从源码编译安装 icecc
install_from_source() {
    log_warning "从源码编译安装 icecc（需要较长时间）..."
    
    # 安装编译依赖
    log_info "安装编译依赖..."
    if [ "$OS_TYPE" = "centos" ]; then
        yum groupinstall -y "Development Tools"
        
        # 安装基础依赖
        yum install -y libcap-ng-devel lzo-devel libarchive-devel \
                       docbook2X libxslt wget
        
        # libzstd 在 CentOS 7 的 EPEL 中可能没有，尝试安装
        log_info "尝试安装 libzstd..."
        if yum list available libzstd-devel &>/dev/null; then
            yum install -y libzstd-devel
        elif yum list available zstd-devel &>/dev/null; then
            yum install -y zstd-devel
        else
            log_warning "⚠️ libzstd 不可用，将禁用 zstd 支持（不影响核心功能）"
        fi
        
    elif [ "$OS_TYPE" = "debian" ]; then
        apt-get update
        apt-get install -y build-essential cmake pkg-config \
                          libcap-ng-dev liblzo2-dev libarchive-dev libzstd-dev \
                          docbook2x libxslt1-dev wget curl
    fi
    
    # 下载源码
    local version="1.4.0"
    local tarball="icecc-${version}.tar.xz"
    
    log_info "下载 icecc ${version} 源码..."
    cd /tmp
    
    # 检查是否已有文件
    if [ -f "$tarball" ]; then
        log_info "发现已存在的文件: $tarball"
        if tar -tf "$tarball" &>/dev/null; then
            log_info "✅ 文件完整，跳过下载"
            return 0
        else
            log_warning "文件已损坏，重新下载..."
            rm -f "$tarball"
        fi
    fi
    
    # 多个下载源（GitHub + 国内镜像）
    # 注意：文件名是 icecc-1.4.0.tar.xz（不是 icecream）
    local urls=(
        "https://mirror.ghproxy.com/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://ghproxy.net/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://gh.api.99988866.xyz/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
    )
    
    local download_success=false
    
    # 验证下载的文件
    validate_download() {
        local file="$1"
        local min_size=102400  # 100KB，icecream 应该至少 500KB
        
        # 检查文件是否存在
        if [ ! -f "$file" ]; then
            return 1
        fi
        
        # 检查文件大小
        local file_size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null || echo 0)
        if [ "$file_size" -lt "$min_size" ]; then
            log_warning "文件太小 (${file_size} 字节)，应该至少 500KB"
            return 1
        fi
        
        # 检查文件类型
        if ! file "$file" | grep -q "XZ compressed"; then
            log_warning "文件格式不正确，不是 XZ 压缩文件"
            return 1
        fi
        
        # 尝试验证 tar 结构
        if ! tar -tf "$file" &>/dev/null; then
            log_warning "tar 文件结构验证失败"
            return 1
        fi
        
        return 0
    }
    
    # 尝试使用 wget 下载
    if command -v wget &> /dev/null; then
        for url in "${urls[@]}"; do
            log_info "尝试 wget 下载: ${url}"
            if wget --no-check-certificate --timeout=60 --tries=2 "$url" -O "$tarball" 2>&1 | grep -v "^$"; then
                if validate_download "$tarball"; then
                    local size=$(stat -f%z "$tarball" 2>/dev/null || stat -c%s "$tarball" 2>/dev/null)
                    log_info "✅ 下载成功 ($(echo "scale=2; $size/1024" | bc) KB)"
                    download_success=true
                    break
                else
                    log_warning "下载的文件无效，尝试下一个源..."
                    rm -f "$tarball"
                fi
            else
                log_warning "wget 下载失败，尝试下一个源..."
                rm -f "$tarball"
            fi
        done
    fi
    
    # 如果 wget 失败，尝试使用 curl
    if [ "$download_success" = false ] && command -v curl &> /dev/null; then
        log_info "wget 失败，尝试使用 curl..."
        for url in "${urls[@]}"; do
            log_info "尝试 curl 下载: ${url}"
            if curl -k -L --connect-timeout 60 --max-time 180 --progress-bar -o "$tarball" "$url"; then
                if validate_download "$tarball"; then
                    local size=$(stat -f%z "$tarball" 2>/dev/null || stat -c%s "$tarball" 2>/dev/null)
                    log_info "✅ 下载成功 ($(echo "scale=2; $size/1024" | bc) KB)"
                    download_success=true
                    break
                else
                    log_warning "下载的文件无效，尝试下一个源..."
                    rm -f "$tarball"
                fi
            else
                log_warning "curl 下载失败，尝试下一个源..."
                rm -f "$tarball"
            fi
        done
    fi
    
    if [ "$download_success" = false ]; then
        log_error "所有下载源均失败"
        echo ""
        echo "请手动下载并安装："
        echo ""
        echo "1. 下载源码（选择以下任一地址）："
        echo "   • GitHub: https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo "   • 镜像1: https://mirror.ghproxy.com/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo "   • 镜像2: https://ghproxy.net/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo ""
        echo "2. 上传到服务器 /tmp 目录"
        echo ""
        echo "3. 运行以下命令："
        echo "   cd /tmp"
        echo "   tar -xf ${tarball}"
        echo "   cd icecc-${version}"
        echo "   ./configure --prefix=/usr --sysconfdir=/etc"
        echo "   make -j\$(nproc)"
        echo "   sudo make install"
        echo ""
        exit 1
    fi
    
    # 解压并编译
    log_info "解压并编译..."
    tar -xf "$tarball"
    cd "icecc-${version}"
    
    # 检查是否有 libzstd
    local configure_opts="--prefix=/usr --sysconfdir=/etc"
    if ! pkg-config --exists libzstd 2>/dev/null; then
        log_warning "libzstd 不可用，禁用 zstd 支持"
        configure_opts="$configure_opts --without-man"
    fi
    
    log_info "配置编译选项: $configure_opts"
    ./configure $configure_opts
    
    log_info "开始编译（需要 5-10 分钟）..."
    make -j$(nproc)
    
    log_info "安装到系统..."
    make install
    
    # 清理
    cd /
    rm -rf "/tmp/icecc-${version}" "/tmp/${tarball}"
    
    log_info "✅ icecc 从源码安装完成"
}

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then 
    log_error "请使用 root 权限运行此脚本：sudo $0"
    exit 1
fi

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# 加载配置
DISTCC_CONF="${SCRIPT_DIR}/distcc.conf"
if [ -f "$DISTCC_CONF" ]; then
    source "$DISTCC_CONF"
else
    log_warning "未找到 distcc.conf，使用默认配置"
    ICECC_SCHEDULER_HOST="172.18.63.1:8765"
    ICECC_NETNAME="nfshm-build"
fi

# 命令行参数覆盖配置文件
if [ -n "$1" ]; then
    ICECC_SCHEDULER_HOST="$1"
    log_info "使用命令行参数指定调度器：$ICECC_SCHEDULER_HOST"
fi

# 获取 CPU 核心数
CPU_CORES=$(nproc)
MAX_JOBS=${ICECC_MAX_JOBS:-$CPU_CORES}

log_step "🚀 开始部署 icecc 编译节点..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# 1. 检测操作系统
log_step "1️⃣ 检测操作系统..."
if [ -f /etc/redhat-release ]; then
    OS_TYPE="centos"
    log_info "检测到 CentOS/RHEL 系统"
elif [ -f /etc/debian_version ]; then
    OS_TYPE="debian"
    log_info "检测到 Debian/Ubuntu 系统"
else
    log_error "不支持的操作系统"
    exit 1
fi

# 2. 安装 icecc
log_step "2️⃣ 安装 icecc..."

# 强制版本检查函数
check_icecc_version() {
    local required_version="1.4"
    local current_version=""
    
    # 检查是否已安装
    if ! command -v icecc &> /dev/null || ! command -v iceccd &> /dev/null; then
        return 1  # 未安装
    fi
    
    # 获取当前版本
    current_version=$(icecc --version 2>&1 | grep -oE '[0-9]+\.[0-9]+' | head -1)
    
    if [ -z "$current_version" ]; then
        log_warning "⚠️ 无法获取 icecc 版本，将重新安装"
        return 1
    fi
    
    log_info "当前 icecc 版本: $current_version"
    
    # 检查主版本号和次版本号
    local current_major=$(echo "$current_version" | cut -d'.' -f1)
    local current_minor=$(echo "$current_version" | cut -d'.' -f2)
    local required_major=$(echo "$required_version" | cut -d'.' -f1)
    local required_minor=$(echo "$required_version" | cut -d'.' -f2)
    
    if [ "$current_major" -eq "$required_major" ] && [ "$current_minor" -eq "$required_minor" ]; then
        log_info "✅ icecc 版本正确 ($current_version)"
        return 0  # 版本正确
    else
        log_error "❌ icecc 版本不匹配！"
        log_error "   当前版本: $current_version"
        log_error "   要求版本: $required_version.x"
        log_error "   版本不一致会导致无法连接到调度器"
        echo ""
        log_warning "⚠️ 将强制重新安装 icecc 1.4.0..."
        echo ""
        return 1  # 版本不匹配
    fi
}

# 检查版本
if check_icecc_version; then
    log_info "✅ icecc 1.4 已安装，跳过安装步骤"
else
    # CentOS 7 的 EPEL 仓库 icecc 版本过老（通常是 0.9.x 或 1.0.x）
    # 为了避免版本不匹配问题，强制从源码安装 1.4.0
    log_warning "⚠️ 为确保版本一致性，将从源码编译安装 icecc 1.4.0"
    log_info "   原因：CentOS EPEL 仓库的 icecc 版本通常过老（< 1.4）"
    log_info "   只有所有节点（调度器、编译节点、客户端）使用相同版本，才能正常工作"
    echo ""
    
    # 如果已安装旧版本，先卸载
    if command -v icecc &> /dev/null; then
        log_info "检测到已安装的 icecc，先卸载旧版本..."
        if [ "$OS_TYPE" = "centos" ]; then
            yum remove -y icecream 2>/dev/null || true
        elif [ "$OS_TYPE" = "debian" ]; then
            apt-get remove -y icecc 2>/dev/null || true
        fi
    fi
    
    # 强制从源码安装 1.4.0
    install_from_source
    
    # 验证安装的版本
    if command -v icecc &> /dev/null && command -v iceccd &> /dev/null; then
        # icecc 支持 --version
        installed_version=$(icecc --version 2>&1 | grep -i "ICECC" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
        
        if [ -z "$installed_version" ]; then
            log_warning "⚠️ 无法获取版本号，但命令可用"
            installed_version="unknown"
        else
            log_info "✅ 安装完成，版本: $installed_version"
            
            if ! echo "$installed_version" | grep -q "^1\.4"; then
                log_error "❌ 安装的版本不是 1.4.x: $installed_version"
                log_error "   这不应该发生，请检查 install_from_source 函数"
                exit 1
            fi
        fi
    else
        log_error "❌ icecc 或 iceccd 命令不可用"
        exit 1
    fi
fi

# 检查并创建 systemd 服务文件（无论是否重新安装都需要检查）
log_step "2.5️⃣ 检查 systemd 服务文件..."

# 确定服务文件路径
if [ -d /usr/lib/systemd/system ]; then
    SERVICE_FILE="/usr/lib/systemd/system/iceccd.service"
elif [ -d /lib/systemd/system ]; then
    SERVICE_FILE="/lib/systemd/system/iceccd.service"
else
    log_error "❌ 找不到 systemd 目录"
    exit 1
fi

# 检查服务文件是否存在
if [ -f "$SERVICE_FILE" ]; then
    log_info "✅ systemd 服务文件已存在: $SERVICE_FILE"
else
    log_warning "⚠️ systemd 服务文件不存在，正在创建..."
    
    # 创建服务文件（根据系统类型选择配置文件路径）
    if [ "$OS_TYPE" = "centos" ]; then
        ENV_FILE="/etc/sysconfig/icecc"
    else
        # Debian/Ubuntu 也使用 /etc/sysconfig/icecc 以保持一致性
        mkdir -p /etc/sysconfig
        ENV_FILE="/etc/sysconfig/icecc"
    fi
    
    cat > "$SERVICE_FILE" << SERVICEEOF
[Unit]
Description=Icecream distributed compiler daemon
After=network.target

[Service]
Type=simple
User=icecc
Group=icecc
EnvironmentFile=${ENV_FILE}
ExecStart=/usr/sbin/iceccd -n \${ICECC_NETNAME} -s \${ICECC_SCHEDULER_HOST} -m \${ICECC_MAX_JOBS} -v
StandardOutput=journal
StandardError=journal
SyslogIdentifier=iceccd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
SERVICEEOF
    
    log_info "✅ systemd 服务文件已创建: $SERVICE_FILE"
fi

# 重新加载 systemd 配置
systemctl daemon-reload
log_info "✅ systemd 配置已重新加载"

# 3. 配置编译节点
log_step "3️⃣ 配置 icecc 编译节点..."

# 为保持一致性，所有系统都使用 /etc/sysconfig/icecc
CONFIG_FILE="/etc/sysconfig/icecc"
mkdir -p /etc/sysconfig

cat > "$CONFIG_FILE" << EOF
# icecc 编译节点配置
# 由 setup-icecc-node.sh 自动生成

# 调度器地址（必须能连接到调度器）
# 注意：不要加引号，iceccd 可能无法正确解析带引号的地址
ICECC_SCHEDULER_HOST=${ICECC_SCHEDULER_HOST}

# 网络名称（必须与调度器一致）
ICECC_NETNAME=${ICECC_NETNAME}

# 最大并行编译任务数（建议为 CPU 核心数）
ICECC_MAX_JOBS=${MAX_JOBS}

# 允许接收远程编译任务
ICECC_ALLOW_REMOTE=yes

# Nice 优先级（0-20，越高优先级越低）
ICECC_NICE_LEVEL=5

# 日志级别
ICECC_LOG_LEVEL=info

# 日志文件
ICECC_LOGFILE=/var/log/icecc/iceccd.log

# 监听端口（默认 10245）
ICECC_LISTEN_PORT=10245
EOF

log_info "配置文件已创建：$CONFIG_FILE"

# 4. 创建日志和缓存目录
log_step "4️⃣ 创建日志和缓存目录..."

# 创建日志目录
mkdir -p /var/log/icecc

# 创建缓存目录（重要！）
mkdir -p /var/cache/icecream

# 检查 icecc 用户是否存在
if ! id -u icecc &>/dev/null; then
    log_warning "icecc 用户不存在，创建用户..."
    useradd -r -s /sbin/nologin -d /var/cache/icecream -c "Icecream distributed compiler" icecc 2>/dev/null || true
fi

# 设置目录权限
chown -R icecc:icecc /var/log/icecc 2>/dev/null || true
chown -R icecc:icecc /var/cache/icecream 2>/dev/null || true
chmod 755 /var/cache/icecream

log_info "✅ 目录权限已设置"
log_info "  日志目录: /var/log/icecc"
log_info "  缓存目录: /var/cache/icecream"

# 5. 配置防火墙
log_step "5️⃣ 配置防火墙..."

# 检查 firewalld
if command -v firewall-cmd &> /dev/null; then
    if systemctl is-active --quiet firewalld; then
        log_info "开放 icecc 编译节点端口：10245"
        firewall-cmd --permanent --add-port=10245/tcp
        firewall-cmd --reload
        log_info "✅ firewalld 规则已添加"
    else
        log_warning "⚠️ firewalld 未运行"
        echo ""
        echo "  选项 1：启动 firewalld"
        echo "    sudo systemctl start firewalld"
        echo "    sudo systemctl enable firewalld"
        echo "    sudo firewall-cmd --permanent --add-port=10245/tcp"
        echo "    sudo firewall-cmd --reload"
        echo ""
        echo "  选项 2：使用 iptables"
        echo "    sudo iptables -A INPUT -p tcp --dport 10245 -j ACCEPT"
        echo "    sudo service iptables save  # CentOS 6"
        echo "    或"
        echo "    sudo iptables-save > /etc/sysconfig/iptables  # CentOS 7+"
        echo ""
        echo "  选项 3：云服务器安全组（推荐）"
        echo "    在云服务商控制台配置安全组，开放端口 10245"
        echo ""
    fi
elif command -v iptables &> /dev/null; then
    log_info "使用 iptables 配置防火墙..."
    if iptables -L -n | grep -q "10245"; then
        log_info "✅ 端口 10245 已开放"
    else
        iptables -A INPUT -p tcp --dport 10245 -j ACCEPT
        # 尝试保存规则
        if [ -f /etc/sysconfig/iptables ]; then
            iptables-save > /etc/sysconfig/iptables
            log_info "✅ iptables 规则已保存"
        else
            log_warning "⚠️ 无法保存 iptables 规则，重启后失效"
            log_info "手动保存: sudo iptables-save > /etc/sysconfig/iptables"
        fi
    fi
else
    log_warning "⚠️ 未检测到防火墙工具"
    echo ""
    echo "  请手动配置防火墙，开放端口：10245/tcp"
    echo ""
    echo "  如果使用云服务器，请在控制台配置安全组："
    echo "    • 阿里云：ECS 控制台 → 安全组 → 入方向规则"
    echo "    • 腾讯云：CVM 控制台 → 安全组 → 入站规则"
    echo "    • AWS：EC2 控制台 → Security Groups → Inbound Rules"
    echo ""
fi

# 6. 启动编译节点
log_step "6️⃣ 启动 icecc 编译节点..."

# 检查服务是否已运行
if systemctl is-active --quiet iceccd; then
    log_info "iceccd 服务已运行，重启服务..."
    systemctl restart iceccd
else
    log_info "启动 iceccd 服务..."
    systemctl enable iceccd
    systemctl start iceccd
fi

# 等待服务启动
sleep 2

# 7. 验证节点状态
log_step "7️⃣ 验证编译节点状态..."
if systemctl is-active --quiet iceccd; then
    log_info "✅ icecc 编译节点服务已启动"
else
    log_error "❌ icecc 编译节点服务启动失败"
    systemctl status iceccd
    exit 1
fi

# 检查端口监听
if netstat -tuln 2>/dev/null | grep -q ":10245"; then
    log_info "✅ 编译节点正在监听端口 10245"
elif ss -tuln 2>/dev/null | grep -q ":10245"; then
    log_info "✅ 编译节点正在监听端口 10245"
else
    log_warning "⚠️ 未检测到端口监听，请检查服务日志"
fi

# 8. 检查与调度器的连接
log_step "8️⃣ 检查与调度器的连接..."
SCHEDULER_IP=$(echo "$ICECC_SCHEDULER_HOST" | cut -d':' -f1)
SCHEDULER_PORT=$(echo "$ICECC_SCHEDULER_HOST" | cut -d':' -f2)

# 验证调度器地址格式
if [ -z "$SCHEDULER_IP" ] || [ -z "$SCHEDULER_PORT" ]; then
    log_error "❌ 调度器地址格式错误: ${ICECC_SCHEDULER_HOST}"
    log_error "   正确格式: IP:端口 (例如: 172.18.63.1:8765)"
    exit 1
fi

log_info "正在测试连接到调度器 ${ICECC_SCHEDULER_HOST}..."

# 测试网络连通性
if timeout 5 bash -c "cat < /dev/null > /dev/tcp/${SCHEDULER_IP}/${SCHEDULER_PORT}" 2>/dev/null; then
    log_info "✅ 网络连接正常，可以访问调度器 ${ICECC_SCHEDULER_HOST}"
else
    log_error "❌ 无法连接到调度器 ${ICECC_SCHEDULER_HOST}"
    echo ""
    log_error "可能的原因："
    log_error "  1. 调度器服务未启动"
    log_error "     解决：在调度器节点运行 'systemctl status icecc-scheduler'"
    log_error ""
    log_error "  2. 调度器 IP 地址错误"
    log_error "     当前配置: ${SCHEDULER_IP}"
    log_error "     解决：检查调度器节点的实际 IP 地址"
    log_error ""
    log_error "  3. 调度器端口错误"
    log_error "     当前配置: ${SCHEDULER_PORT}"
    log_error "     解决：检查调度器配置文件 /etc/sysconfig/icecc"
    log_error ""
    log_error "  4. 防火墙阻止连接"
    log_error "     解决：在调度器节点开放端口 ${SCHEDULER_PORT}"
    log_error "     命令：firewall-cmd --permanent --add-port=${SCHEDULER_PORT}/tcp"
    log_error "           firewall-cmd --reload"
    log_error ""
    log_error "  5. 网络不通（跨地域、跨云）"
    log_error "     解决：使用 ping 和 telnet 测试网络连通性"
    echo ""
    log_warning "⚠️  节点服务已启动，但可能无法连接到调度器"
    log_warning "请修复网络连接问题后，重启服务：systemctl restart iceccd"
fi

# 9. 验证配置一致性
log_step "9️⃣ 验证配置..."

# 检查配置文件
if [ -f "$CONFIG_FILE" ]; then
    log_info "✅ 配置文件存在: $CONFIG_FILE"
    
    # 显示关键配置
    log_info "关键配置项："
    log_info "  - 调度器地址: ${ICECC_SCHEDULER_HOST}"
    log_info "  - 网络名称: ${ICECC_NETNAME} ${YELLOW}(必须与调度器一致)${NC}"
    log_info "  - 最大任务数: ${MAX_JOBS}"
    log_info "  - 监听端口: 10245"
else
    log_error "❌ 配置文件不存在: $CONFIG_FILE"
fi

# 检查 iceccd 日志，查看连接状态
log_info "检查节点日志..."
sleep 2
if journalctl -u iceccd -n 10 --no-pager 2>/dev/null | grep -qi "connected to scheduler"; then
    log_info "✅ 已成功连接到调度器"
elif journalctl -u iceccd -n 10 --no-pager 2>/dev/null | grep -qi "scheduler"; then
    log_warning "⚠️ 检测到调度器相关日志，请查看详细信息："
    journalctl -u iceccd -n 5 --no-pager 2>/dev/null | grep -i "scheduler" || true
else
    log_warning "⚠️ 暂未检测到连接成功的日志"
    log_info "提示：节点可能需要几秒钟才能连接到调度器"
fi

# 10. 显示节点信息
log_step "🎉 编译节点信息..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "${GREEN}✅ icecc 编译节点部署完成！${NC}"
echo ""
echo "📊 节点配置："
echo "  ├─ 调度器地址：${ICECC_SCHEDULER_HOST}"
echo "  ├─ 网络名称：${ICECC_NETNAME} ${YELLOW}(必须与调度器一致)${NC}"
echo "  ├─ CPU 核心数：${CPU_CORES}"
echo "  ├─ 最大任务数：${MAX_JOBS}"
echo "  ├─ 监听端口：10245"
echo "  ├─ 配置文件：${CONFIG_FILE}"
echo "  └─ 日志文件：/var/log/icecc/iceccd.log"
echo ""
echo "📝 节点 IP 地址："
NODE_IPS=($(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v "127.0.0.1"))
for ip in "${NODE_IPS[@]}"; do
    echo "  - ${ip}"
done
echo ""
echo "⚠️  重要提示："
echo "  ${YELLOW}确保与调度器使用相同版本 icecc (1.4.x) 和相同网络名称 (${ICECC_NETNAME})${NC}"
echo ""
echo "🔧 验证连接状态："
echo "  1️⃣  查看本节点日志（查找连接成功信息）："
echo "     journalctl -u iceccd -n 20 --no-pager | grep -i scheduler"
echo ""
echo "  2️⃣  在调度器节点上查看已连接的编译节点："
echo "     journalctl -u icecc-scheduler -n 50 --no-pager | grep 'connected'"
echo ""
echo "  3️⃣  如果连接失败，检查："
echo "     • 调度器是否在运行: systemctl status icecc-scheduler"
echo "     • 网络是否通：telnet ${SCHEDULER_IP} ${SCHEDULER_PORT}"
echo "     • 防火墙规则：firewall-cmd --list-ports"
echo "     • 版本是否一致：icecc --version"
echo "     • 网络名称是否一致：查看调度器 /etc/sysconfig/icecc"
echo ""
echo "🔍 快速查看状态（推荐）："
echo "  cd /path/to/nfshm-xframe"
echo "  ./ci/icecc-status.sh node"
echo ""
echo "🔍 手动查看状态："
echo "  systemctl status iceccd"
echo "  journalctl -u iceccd -f"
echo ""
echo "🔍 测试连接到调度器："
echo "  journalctl -u iceccd | grep -i 'connect\|scheduler'"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

